사이트 내 전체검색
PHP
like .. 대신 INSTR 사용하기..
로빈아빠
https://cmd.kr/php/746 URL이 복사되었습니다.

본문

간단한 팁인데...

원하는 갯수나 조건일치등을 구할때 보통

count(*) from TABLE_NAME where Field_Name like \'%Find_Text%\';

를 사용하는데..

이것대신에..

count(*) from TABLE_NAME where INSTR(Field_Name,\'Find_Text\') > 0;

를 사용하면 보다 빠른 결과를 얻을수 있습니다.






명랑폐인™ %%로 무조건 검색을 시도 하는 걸 막을수 있겠군요..
02/18 2:47:46

깨비 이런 방법도 있었군요...
like 만 사용했었는데...
지금 검색에 적용해서 해봤는데 이상없이 잘 작동하네요... :)

속도는 아직까진 잘 모르겠습니다... like 보다 INSTR 함수를
사용하면 정말 더 빠른가요? 이런게 왜 잘 알려지지 않았을까... 02/18 3:04:26

까마귀 오...좋은 팁이군요.:)
속도차이는 어떤지 함 테스트 해봐야겠군요. 02/18 3:05:57

jyuvenia
메뉴얼을 잘 보시면 나와있습니다.
이 외에도, 별로 자주 쓰이지는 않지만 가끔 꽁수로 해결하던
문제를 단번에 처리할 수 있는 함수들도 많이 있고...
INSTR, LPAD, RPAD, REPLACE, MID .... 등... 등...
잘 알려져 있지 않지만 막상 어떤 상황에서 정말 유용하게
사용할 수 있는 함수들이 꽤 많이 있습니다.
평소에 조금씩... 틈틈히 읽어보는 습관을 들입시다. ^^ 02/18 3:13:01

2003년 메뉴얼을 자세히 읽어보셔야죠 ^^
In MySQL 3.23 this function is case sensitive
in 4.0 it\'s only case-sensitive if either argument is a binary string.
아직 3.x대를 쓰시는분들이 많기때문에 저 기능이 제대로 작동되게 하려면(LIKE는 case-sensitive가 아니죠?)
count(*) from TABLE_NAME where INSTR(LOWER(Field_Name),LOWER(\'Find_Text\')) > 0;
이런식으로 되어야 되겠슴다 ^^
02/18 7:50:55

2003년 또는 검색시에 PHP에서 keyword에 영문이 들어간 경우에면 LOWER()함수를 붙여주는것도 괜찮죠 어차피 1줄추가하는것으로 끝날테니까요. 02/18 7:52:00

2003년 아참..속도차이? 엄청납니다. -_- 한번 해보시면 아시게 됩니다.
많이 글치만 사람들이 왜 LIKE를 INSTR보다 더 많이 쓰느냐?
-_- 모르기 때문이죠. 주변에서 다 그렇게 쓰니까 덩달아 쓰는거죠. 생각없이.. 02/18 8:30:16

munggo mysql 에서 like를 사용할때에 like \'%search str%\' 을 이용하면 인덱스를 사용하지 않아서 속도가 느림니다. 4.x대에서는 인덱스를 사용한다는군요 like \'search str%\' 를 사용하면 인덱스를 참조합니다. ^^ 02/18 9:11:08

Aki_Rose 오....;; 좋은거 배웠네요 ^_^;
좋은팁 감사 (_ _); 02/18 10:04:37

sh. position(substr in str)으로 써도 똑같습니다. 02/18 10:37:03

아성 where Field_Name like \'%Find_Text%\'; 0.05 sec
where INSTR(LOWER(Field_Name),LOWER(\'Find_Text\')) > 0; 0.03 sec
위에분 말씀처럼 LOWER 안쓰면 검색결과가 틀리군요. 주의하세요. 02/18 13:24:02

ingka 멋집니다 ^^ 02/18 14:26:29

학식 덕분에 Mysql 메뉴얼에서 그쪽을 살펴보게 되었습니다.
감사합니다. 감사하구요~ 정규 표현식도 된다는것을 알았네요.
메뉴얼에 나온 예제입니다.

mysql> SELECT \'Monty!\' REGEXP \'m%y%%\';
-> 0
mysql> SELECT \'Monty!\' REGEXP \'.*\';
-> 1
mysql> SELECT \'new*\\n*line\' REGEXP \'new\\\\*.\\\\*line\';
-> 1
mysql> SELECT \"a\" REGEXP \"A\", \"a\" REGEXP BINARY \"A\";
-> 1 0
mysql> SELECT \"a\" REGEXP \"^[a-d]\";
-> 1 02/18 14:38:00

깨비 검색을 한글로만 테스트해봐서 몰랐네요...
영문으로 하니 LOWER을 한쓰면 검색도 대소문자를 가리는군요..
한글키워드에는 LOWER 사용해도 상관없는건가요?
일단 되는것 같긴 한데 영문처럼 검색결과가 달라진다던지
하지는 않을지 잘 모르겠네요;; 02/18 15:42:04

깨비 공백이 포함된 2단어의 검색시에

한글 영문 -> 검색 안됨
영문 한글 -> 검색 가능

이더군요... 왜 이런걸까요?

ex)
3개의 글에 각각
깨비 abc
테스트 깨비
test 깨비
라는 문자열이 포함되어 있구요..

\'깨비\'로 검색하면 3개의 글이 검색되고
\'test 깨비\' 로 검색하면 \'test 깨비\' 가 포함된 한개의 글이
검색이 됩니다. 여기까지는 잘 되다가...

\'깨비 abc\' 검색을 하니 검색이 안되네요...
무슨 이유가 있는걸까요?

한영 조합의 공백이 있는 문자열로 검색할때
한글과 영어의 순서에따라서 이런 결과가 나오니까 좀 이상하네요...

댓글목록

등록된 댓글이 없습니다.

PHP
871 (5/18P)

Search

Copyright © Cmd 명령어 3.147.58.70